// tools.c: for pmsbu
// compile with: gcc -O -c tools.c

#include "tools.h"

void vetAleatorio(int *v, int t) {
	for (; (--t) >= 0;)
		v[t] = (int) random() % 1000;
}


/* le um inteiro no intervalo [min, max] apos apresentar o texto mess ao usuario
   Pre-condicao: min<=max
   Pos-condicao: Retorna o valor lido.  So aceita valores dentro do intervalo.
*/
int leInt(int min, int max, char *mess) {
	int x;
	do {
		/* escreve mess e le dado */
		printf(mess);
		scanf("%d", &x);

		/* verifica  validade */
		if (x<min || x>max)
			printf("\n***Valor tem que ser no intervalo [%d, %d]. "
		           "Tente novamente.***\n", min, max);
	} while (x<min || x>max);
	return x;
}


/* Imprime mensagem na tela e espera o enter do usuario. Facilita o uso de menus.
   Pos-condicao: escreve a mensagem
*/
void myPrintf(char *msg) {
	printf(msg);
	LimpaBuffer;
	getchar();
	LimpaBuffer;
}


/* Pos-condicao: Imprime os elementos do vetor v[0..t-1] pulando de linha a cada 16 elementos
*/
void printv(int *v, int i, int f) {
	int count = 0;
	for (; i<=f; i++) {
		printf("%d ", v[i]);
		if ( (++count) % 16 == 0 )
			printf("\n");
	}
}


/* Pos-condicao: Imprime os elementos do vetor v[0..t-1] pulando de linha a cada 16 elementos
*/
void fprintv(FILE *fp, int *v, int i, int f) {
	int count = 0;
	fprintf(fp, "\n");
	for (; i<=f; i++) {
		fprintf(fp, "%d ", v[i]);
		if ( (++count) % 16 == 0 )
			fprintf(fp, "\n");
	}
}


/* Verifica se v[0..n-1] esta em ordem crescente
   Pos-condicao: retorna 1 se v[0..n-1] estiver em ordem crescente, 0 cc.
*/
int verificaOrdem(int *v, int n) {
	int i;
//	printf("\nVerifica n:%d\n", n);
	for (i=0; i<n-1; i++)
		if (v[i]>v[i+1])
			return 0;
	return 1;
}


/* Verifica se v[0..n-1] esta em ordem crescente
   Pos-condicao: retorna 1 se v[0..n-1] estiver em ordem crescente, 0 cc.
*/
int fverificaOrdem(FILE *fp, int *v, int n) {
	int i;
	fprintf(fp, "\nVerifica n:%d", n);
	for (i=0; i<n-1; i++)
		if (v[i]>v[i+1])
			return 0;
	return 1;
}